package rsp

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

type response struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
	Data any    `json:"data"`
}

type Func func(rsp *response)

// SetCode 设置code
func SetCode(code int) Func {
	return func(rsp *response) {
		rsp.Code = code
	}
}

// SetMsg 设置消息
func SetMsg(msg string) Func {
	return func(rsp *response) {
		rsp.Msg = msg
	}
}

// SetData 设置数据
func SetData(data any) Func {
	return func(rsp *response) {
		rsp.Data = data
	}
}

// JsonOk 响应json成功消息
func JsonOk(c *gin.Context, f ...Func) {
	s := &response{
		Code: 0,
		Msg:  "success",
	}

	for _, f := range f {
		f(s)
	}

	c.JSON(http.StatusOK, s)
}

// JsonErr 响应失败数据
func JsonErr(c *gin.Context, f ...Func) {
	s := &response{
		Code: 400,
		Msg:  "fail",
	}

	for _, f := range f {
		f(s)
	}
	c.JSON(http.StatusOK, s)
}
